//
//  "$Id: System.h 55381 2012-03-23 02:26:54Z wang_haifeng $"
//
//  Copyright (c)1992-2007, ZheJiang Dahua Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//

#ifndef __SYSTEM3_API_H__
#define __SYSTEM3_API_H__

#include "Types.h"
#include "Defs.h"

#ifdef __cplusplus
extern "C" {
#endif

/// 时间结构
typedef struct PalTime
{
	int  year;		///< 年。
	int  month;		///< 月，January = 1, February = 2, and so on.
	int  day;		///< 日。
	int  wday;		///< 星期，Sunday = 0, Monday = 1, and so on
	int  hour;		///< 时。
	int  minute;	///< 分。
	int  second;	///< 秒。
	int  isdst;		///< 夏令时标识。
}PalTime;

typedef struct SystemWrapper
{
	/// 底层私有数据
	void *priv;


	/// 增加接口引用
	int (*addRef)(struct SystemWrapper *thiz);


	/// 释放接口
	int (*release)(struct SystemWrapper *thiz);

	/// 让系统蜂鸣器发出单音调的声音，是同步模式，时间到才返回。
	/// \param [in] thiz 系统接口指针
	/// \param [in] frequence 音调频率。
	/// \param [in] duration 持续的时间，毫秒为单位。
	void (*beep)(struct SystemWrapper *thiz, ulong frequence, ulong duration);

	/// 保留字节
	void* reserved[124];
} SystemWrapper;

/// 系统异常类型
typedef enum SystemErrorType
{
	systemErrorReboot = 0,	///<系统异常，需要reboot恢复
	systemErrorRecord = 1,	///<系统异常，需要记录异常
}SystemErrorType;

/// 系统异常信息 固定256个字节
typedef struct SystemErrorInfo
{
	int  type;				///< 系统异常类型，定义见SystemErrorType。
	char description[128];	///< 系统信息描述字符串。
	char reserve[124];		///< 保留
}SystemErrorInfo;

/// 串口接口描述结构，32位系统下128字节
typedef struct SystemWrapperDesc
{
	/// 得到系统时间
	/// 
	/// \param [out] nowtime 系统时间。
	/// \retval 0  获取成功。
	/// \retval <0  获取失败。
	int (*getDatetime)(PalTime *nowtime);

	/// 上报系统异常
	/// 
	/// \param [out] errorInfo 系统异常信息。
	/// \retval 0  获取成功。
	/// \retval <0  获取失败。
	int (*reportSysError)(SystemErrorInfo *errorInfo);

	int reserved[30];	///< 保留字节
} SystemWrapperDesc;


/// 创建系统接口
///
/// \param [in] desc 系统接口描述结构SystemWrapperDesc指针
/// \param [out] wrapper 系统接口指针的指针
/// \retval 0  连接成功。
/// \retval <0  连接失败。
int PAL_API createSystemWrapper(SystemWrapperDesc *desc, SystemWrapper **wrapper);

/// @} end of group

#ifdef __cplusplus
}
#endif

#endif //__SYSTEM_API_H__

